package com.guohengspace.mq.service.impl;

import com.aliyun.asapi.ASClient;
import com.guohengspace.mq.common.ResponseResult;
import com.guohengspace.mq.model.query.DescribeImagesParam;
import com.guohengspace.mq.model.query.ImportImageParam;
import com.guohengspace.mq.service.EcsImportImageService;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.HttpClientConfig;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.profile.DefaultProfile;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;


@Slf4j
@Service
public class EcsImportImageServiceImpl implements EcsImportImageService {
    @Value("${eip.asapiEndpoint}")
    String endpoint;

    @Value("${eip.regionId}")
    String regionId;

    @Override
    public ResponseResult<?> importImage(ImportImageParam param) {
        // 创建DefaultAcsClient实例并初始化
        DefaultProfile profile = DefaultProfile.getProfile(
                "", // 请替换为您实际的地域ID
                param.getAccessKeyId(), // 请替换为您实际的AccessKey ID
                param.getAccessKeySecret()); // 请替换为您实际的AccessKey Secret
// 设置当前产品的Endpoint，可变参数请替换为您的实际值
//        profile.addEndpoint("ecs","");
        HttpClientConfig clientConfig = HttpClientConfig.getDefault();
        clientConfig.setProtocolType(ProtocolType.HTTP);
        profile.setHttpClientConfig(clientConfig);
        IAcsClient client = new DefaultAcsClient(profile);
// 创建API请求并设置参数
        CommonRequest request = new CommonRequest();
// 替换为真实的产品域名
        request.setDomain("ecs.aliyuncs.com");
        request.setSysProduct("Ecs");
        request.setVersion("2014-05-26");
        request.setAction("importImage");

        request.putHeadParameter("x-acs-resourcegroupid", "");// 非必填，请替换为您实际的资源集ID
        request.putHeadParameter("x-acs-organizationid", "");// 必填，请替换为您实际的组织ID
        request.putHeadParameter("x-acs-caller-sdk-source","ApiTestDemo");// 必填，调用来源说明
        request.putHeadParameter("x-acs-regionid", "");// 非必填(企业版V3.15.0及之前历史版本必填),请替换为
// request.putHeadParameter("x-acs-instanceid", "");// 非必填（修改、删除、查询单实例详情时必填）,替换为您实际的实例ID
/**
 当使用STS AccessKey调用接口时 需要在参数中加上SecurityToken字段
 调用方法如下：
 request.putQueryParameter("SecurityToken", "");
 请替换为实际的Token
 */
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
            return  ResponseResult.ok("成功");
        } catch (ServerException e) {
// TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClientException e) {
// TODO Auto-generated catch block
            e.printStackTrace();
        }
        return  ResponseResult.nok("失败");
    }

    public  String describeImages(DescribeImagesParam param ) {
        Map<String, Object> parameters= new HashMap<>();
        parameters.put("action",param.getAction());
        try {
//        log.info("进入接口========");
            // 创建ASClient连接。
            ASClient client = new ASClient();
            log.info("进入接口========");
            // 设置身份标识，标识调用来源，无实际作用，可随意设置，必填项。
            client.setSdkSource("admin");
            // 是否参数首字母大写转化。
            client.setIsFormat(false);
            // ASAPI的Endpoint地址。
//        String endpoint = "http://internal.asapi.cn-beijing-htbj-d01.ops.bjcenter.ht-cloud.cn/asapi/v3";
//        String endpoint = "public.asapi.cn-beijing-htbj-d01.res.bjcenter.ht-cloud.cn";
            String endpoint = "https://public.asapi.cn-beijing-htbj-d01.res.bjcenter.ht-cloud.cn/asapi/v3";
            // 授权相关参数。
            parameters.put(ASClient.ACCESSKEY_ID, param.getAccessKeyId());
            parameters.put(ASClient.ACCESSKEY_SECRET, param.getAccessKeySecret());
            parameters.put(ASClient.REGIONID, regionId);
            // 产品接口信息参数。
            parameters.put(ASClient.PRODUCT, "ascm");
            parameters.put(ASClient.ACTION, parameters.get("Action"));
//        parameters.put(ASClient.ACTION, "GetOrganizationList");
            parameters.put(ASClient.VERSION, "2019-05-10");
            // 接口业务参数设置。
//        parameters.put("id",3);
            // 设置Headers。
            Map<String, String> headers = new HashMap<String, String>();
            headers.put("x-acs-organizationid", "11");
            // 设置连接超时。
            // client.setConnectTimeout(10000);
            // 设置请求超时。
            // client.setSocketTimeout(10000);

            // 发起请求，并获取返回。
            log.info("endpoint:{},headers:{},parameters:{}", endpoint, headers, parameters);
            String result = client.doPost(endpoint, headers, parameters);
            log.info("ascm返回：{}", result);
            return result;
        } catch (Exception e) {
            log.error("ascmRequest异常: {}", e.getMessage(), e);
        }
        return null;
    }


}
